/*sex.c*/

/* Original author unknown.  Presumably this is public domain by now.
 * If you are the original author or know the original author, please
 * contact <freebsd@spatula.net>
 *
 * Orphan code cleaned up a bit by Nick Johnson <freebsd@spatula.net>
 * Completely rewrote how word wrapping works and added -w flag.
 */

// TODO: 能不能使用工具生成一个中文故事,然后截取片段,分别导入到数组
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <string.h>

// INFO：一下都是手动粘贴
static char     *faster[] = {
  "\"黄片\"",             "\"鸡巴\"",
  "\"精子\"",                        "\"漏奶\"",
  "\"螺聊\"",                  "\"裸聊\"",
  "\"裸女\"",             "\"卖逼\"",
  "\"嫩穴\"",   "\"欠干\"",
  "\"强奸\"",                     "\"自慰\"",
  "\"自摸\"",                           "\"日屄\"",
  "\"骚鸡\"",                          "\"插你\"",
  "\"做爱\"",                  "\"少妇\"",
  "\"大屌\"",            "\"风骚\"",
  "\"高潮\"",         "\"不穿\"",
  "\"血逼\"",            "\"扒光\"",
  "\"干女同事\"",                "\"干了大姨子\"",
  "\"干姐姐穴\"",                    "\"爽插美女!\"",
  "\"双穴同插\"",      "\"双龙入洞\"",
  "\"阳具插入小穴\"",           "\"养个女儿做老婆\"",
};

static char     *said[] = {
        "阳具插入肉洞",             "妖娆魅惑抛美胸",               "野外放尿",
        "野战狗粮专卖",              "野外撒尿露出",               "野性靓女骚首弄姿",
        "扣逼|",              "跨下|的女老师",              "淫丝荡袜",
        "美乳美穴",               "美乳内射",           "美骚女",
        "美腿骚货",            "美臀夹阴",              "美臀美尻女",
        "美穴潮吹",            "美穴诱人",            "妹被我操B",
        "猛插女人",                "猛吸|嫩乳",             "迷奸小姨子",
        "迷穴大开撿",
};

static char     *the[] = {
        "秘唇",
};

static char     *fadj[] = {
        "秘密熟母俱乐部",                "秘穴抽插",               "秘书双腿间大图",
        "蜜汁流出",          "蜜穴淫乳",        "女高生初肛交",
        "女教师赤裸",             "女儿我射了",             "女人与动物插穴",
        "招奴",       "女性生殖器",         "淫术炼金士",
        "淫水涟涟",  "淫水四溅",         "淫丝荡袜",
        "淫图色情",              "淫欲肉体",                "饮尿",
        "俏护士",            "意淫",        "阴道嫩穴",
        "阴茎插进姐姐的阴道里",        "阴茎硬塞进了我的体内",          "阴胫",
        "掰穴自慰",        "大JJ",              "靓穴",
};


static char     *female[] = {
"包袱","贱货","女人",
"公爵夫人","女演员","色情狂",
"处女","皮衣怪胎","回家女王",
"被解除圣职的修女","双性恋鹦鹉","啦啦队长",
"办公室秘书","性偏离者","国防高级研究计划局合同监测员",
"《卖火柴的小女孩》《礼仪企鹅》《红颜祸水》",
"老板的女儿","建筑工人","香肠虐待者",
"秘书","议员的听差","祖母",
"企鹅","德国牧羊犬","空姐",
"女服务员","妓女","计算机科学小组",
"家庭主妇",

};

static char     *asthe[] = {
        "作为",
};

static char     *madjec[] = {
   "痛打","啧啧有声","贪得无厌",
"疯狂的","邪恶的","肥胖的",
"梳理鼻子","抚摸肚子","运球",
"张牙舞爪","口欲熏心","卑鄙无耻",
"天赋异禀","英俊潇洒","头脑简单",
"巨吊","三足","打桩",
"变装","沙鼠性交","塞东西",
"舔括约肌","嚼发饼","潜水",
"剥蛤蜊","吸蛋","闻自行车座",
};

static char     *male[] = {
   "拉克海","驼背","好色的马屁精",
"大公","侏儒","雇工",
"大丹犬","种马","驴子",
"电鳗","截瘫瘾君子","脏老头",
"同性恋巴特勒","修士","黑人权利倡导者",
"《卵泡恋物癖》《英俊牧师》《小鸡闪烁》",
"同性恋火烈鸟","前独身主义者","吸毒者",
"前女人","建筑工人","发型设计师",
"牙医","法官","社工",

};

static char     *diddled[] = {
  "欺骗","吞噬","爱抚",
"有嘴的","有舌的","有鞭的",
"扭曲","侵犯","玷污",
"灌溉的","渗透的","强奸的",
"被锤","被咬","舌头被割破",
"吸","干","擦",
"怨恨性交","手淫","啜饮",

};

char *her[] = {
        "女",
};

static char     *titadj[] = {
        "雪花石膏","粉红色","奶油",
"玫瑰花蕾","湿润","悸动",
"多汁","起伏","紧张",
"猛犸","多肉","颤颤巍巍",
"玫瑰","球状","静脉曲张",
"抖动","血腥","倾斜",
"运球","渗出","坚挺",
"下垂的","肌肉的","牛的",
};

static char     *knockers[] = {
"地球仪","甜瓜","土堆",
"buds","paps","chubbies",
"突起","珍宝","小面包",
"桶","前庭","腋窝",
"奶子","奶环","手肘",
"眼睛","猫头鹰","水壶",
"肺","前灯","磁盘驱动器",
"保险杠","膝盖","煎蛋",
"臀部","查理","耳垂",
"乳房","乳房",
};

char *and[] = {
        "干",
};

static char     *thrust[] = {
        "猛跌","推力","挤压",
"敲打","驱使","缓和",
"滑下的","锤过的","压扁的",
"塞得满满的","砰的","挤得满满的",
"冲压","浸渍","插入",
"堵塞的","预示的","推动的",
"撕裂的","强迫的","扭曲的",

};

static char     *his[] = {
        "鸡巴",
};

static char     *dongadj[] = {
"爆裂","突出","闪耀",
"布罗卜丁纳基安","神童","紫色",
"灼热","肿胀","僵硬",
"横冲直撞","疣","热气腾腾",
"狼吞虎咽","像树干一样","起泡",
"喷口水","猪猡","假肢",
"青筋暴露","肿胀","像马一样",
"悸动","巨大","破洞",
"蛇形","弧形","外包钢",
"玻璃外壳","多瘤","手术改变",
"金属尖的","开放的","迅速缩小的",
"肿胀","微小","骨感",

};

static char     *dong[] = {
   "入侵者","尖头","残肢",
"成员","肉饼","陛下",
"船首斜桅","推土机","手提钻",
"拉姆罗德","鳕鱼","叽里咕噜",
"喷井","扑克","发动机",
"布朗尼","快乐棒","活塞",
"活塞","工具","男子气概",
"棒棒糖","肾脏刺激器","烛台",
"约翰·托马斯","手臂","睾丸",
"蛋蛋","手指","脚",
"舌头","鸡巴","独眼惊奇虫",
"峡谷约德尔勒","中间腿","颈部包装器",
"《大棒变档》,《董》,《琳达·拉芙蕾丝choker》",

};

static char     *intoher[] = {
        "进入她",
};

static char     *twatadj[] = {
        "脉动","饥饿","婚姻",
"心慌","瞠目结舌","垂涎欲滴",
"欢迎","吃饱了","狼吞虎咽",
"蜘蛛网","狼吞虎咽","啧啧有声",
"亮晶晶的","滴滴答答的","结痂的",
"多孔的","说话轻柔的","粉红色的",
"尘土飞扬","紧绷","臭气熏天",
"湿润","松散","伤痕累累",
"无武器","香蕉填充","轮胎跟踪",
"老鼠啃","紧张","经常旅行",
"感激","溃烂",

};

static char     *twat[] = {
        "操批",               "吊你的嗨",            "鸡巴我嗦嗦",
        "你妈的逼",           "狠狠操",           "操我",
        "操",                "母女雪臀.",                "娇羞母女雪臀",
        "胴体",             "奸魔.",                "奸尿道.",
        "激情AV片",   "饥渴少妇",        "兼职小姐",
        "人裸聊",     "奸熟女",    "奸幼女",
        "奸妈妈.",                "打炮自拍.",              "加骚妹.",
        "激情肛交",            "脚奴.",              "监禁",
        "教室里干校花.",          "激情聊天",           "坚挺双奶.",
        "猪奴吃屎",       "娇娇师娘",               "兼职处女",
        "郊游时我干了女友同学.",               "娇美的舅妈",                "兼职女援交",
};

struct table {
        char    **item;
        short   len;
};

typedef struct table    TABLE;
#define SZ(a)           sizeof(a) / sizeof(char *)

TABLE   list[] = {
        {faster,         SZ(faster)},     {said,           SZ(said)},
        {the,            SZ(the)},        {fadj,           SZ(fadj)},
        {female,         SZ(female)},     {asthe,          SZ(asthe)},
        {madjec,         SZ(madjec)},     {male,           SZ(male)},
        {diddled,        SZ(diddled)},    {her,            SZ(her)},
        {titadj,         SZ(titadj)},     {knockers,       SZ(knockers)},
        {and,            SZ(and)},        {thrust,         SZ(thrust)},
        {his,            SZ(his)},        {dongadj,        SZ(dongadj)},
        {dong,           SZ(dong)},       {intoher,        SZ(intoher)},
        {twatadj,        SZ(twatadj)},    {twat,           SZ(twat)},
        {(char **)NULL,  /*(short)NULL*/
                ((short)0) // in c NULL, equals to 0?
        },
};

#define LLINE   50
static short    lwidth;
static short    wraplen;

int main(int argc, char **argv)
{
   register TABLE  *ttp;
   register char   *cp;
   int     getpid();
   long     now;
   char buffer[2048];
   int pos, lastword;

   wraplen = 0;
   if (argc > 1) {
	if (!strcmp(argv[1],"-w")) {
	    if (argc == 3) {
		wraplen = atoi(argv[2]);
	    } else {
		wraplen = LLINE;
	    }
	}
   }

   now = time(&now) / random();
   srandom(getpid() + (int)((now >> 16) + now + time(&now)));

   pos = lastword = 0;
   for (ttp = list;ttp->item;++ttp,++lwidth) {
      for (cp = ttp->len > 1 ? ttp->item[random() % ttp->len] :
           *ttp->item;*cp;++cp,++lwidth) {
	buffer[pos] = *cp;
	if ((wraplen > 0) && (lwidth >= wraplen)) {
	    buffer[lastword] = '\n';
	    lwidth = pos - lastword;
	}
	if (isspace(*cp)) {
	    lastword = pos;
	} 
	pos++;
      }
      buffer[pos] = ' ';
      lastword = pos++;
   }
   buffer[pos] = '\0';

   puts(buffer);

   return(0);
}
